package co.fitstart.coach.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import co.fitstart.coach.entity.courseware.DietaryRequest;
import co.fitstart.coach.entity.courseware.PlannedScheduleRequest;
import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.course.schedule.CourseSchedule;
import co.fitstart.entity.courseware.dietary.Dietary;
import co.fitstart.entity.courseware.exercise.Exercise;
import co.fitstart.entity.courseware.exercise.LissType;
import co.fitstart.entity.courseware.exercise.PlannedSchedule;
import co.fitstart.entity.courseware.fitnessgroup.BatchCourseware;

public interface WeeklyPlanService {
    /**
     * load dietary by batchCourseware
     * @param batchCourseware
     * @return
     */
    public Dietary loadDietary(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param batchCourseware
     * @return
     */
    public Dietary generallyLoadDietary(BatchCourseware batchCourseware);
    
    /**
     * edit dietary
     * @param batchCourseware
     * @param dietary
     */
    public void editDietary(BatchCourseware batchCourseware, DietaryRequest dietary);
    
    /**
     * load exercise by batchCourseware
     * @param batchCourseware
     * @return
     */
    public Exercise loadExercise(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param batchCourseware
     * @return
     */
    public List<PlannedSchedule> listPlannedSchedule(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param batchCourseware
     * @param schedules
     * @return
     */
    public Map<Integer, CourseSchedule> listSchedule(BatchCourseware batchCourseware, List<PlannedSchedule> schedules);
    
    /**
     * edit exercise
     * @param batchCourseware
     * @param exercise
     * @param plannedSchedules
     * @param lissTypes
     */
    public void editExercise(BatchCourseware batchCourseware, Exercise exercise,
            PlannedScheduleRequest plannedSchedules, List<LissType> lissTypes);
    
    /**
     * link weekly plan
     * @param batchCourseware
     * @param coachTips
     */
    public void linkWeeklyPlan(BatchCourseware batchCourseware, String coachTips);

    /**
     * 
     * @param courseSchedule
     * @return
     */
    public PlannedSchedule getPlannedSchedule(CourseSchedule courseSchedule);
    
    /**
     * 
     * @param courseRound
     * @return
     */
    public int getCurrentWeek(CourseRound courseRound);
    
    /**
     * 
     * @param courseRound
     * @param week
     * @return
     */
    public Map<String, Date> getWeekBeginAndEnd(CourseRound courseRound, int week);
}
